package cliente.reserva;

import java.awt.event.ActionEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;

import mensagens.EnviaDados;
import mensagens.ManterReserva;
import mensagens.Mensagem;

import cliente.tipos.Reserva;

@SuppressWarnings("serial")
public class ExecutaCadastrarReserva extends AbstractAction {
	
	private CadastrarReserva cr;

	public ExecutaCadastrarReserva(CadastrarReserva cr) {
		setCr(cr);
	}
	
	@Override
	public void actionPerformed(ActionEvent event) {
		if("inserir".equals(event.getActionCommand())){
			// Formato de Data lido pelo Form
			SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
			
			Reserva reserva = new Reserva();
			ManterReserva mr = new ManterReserva(1);
			
			// Tenta ler o id do Hóspede
			try{ reserva.getHospedeId().setCpf(getCr().gettIdCliente().getText());
			} catch (NumberFormatException nfe) {
				JOptionPane.showMessageDialog(getCr().getTfCadastrarReserva(),"Código do cliente não é um número válido!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			
			// Tenta ler o id do apartamento
			try{ reserva.getAp().setNumero(new Integer(getCr().gettNumApto().getText()).intValue());
			System.out.println("apId: "+reserva.getAp().getId());
			} catch (NumberFormatException nfe) {
				JOptionPane.showMessageDialog(getCr().getTfCadastrarReserva(),"Código do apartamento não é um número válido!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			
			// Tenta ler a data de incício e fim
			try {
				reserva.setDataInicio(df.parse(getCr().gettDataIni().getText()));
				reserva.setDataFim(df.parse(getCr().gettDataFim().getText()));
			} catch (ParseException e) {
				e.printStackTrace();
				return;
			}
			
			try{reserva.setValorEntrada(new Double(getCr().gettValorEntrada().getText()));
			} catch (NumberFormatException nfe){
				JOptionPane.showMessageDialog(getCr().getTfCadastrarReserva(),"Valor de entrada não é válido!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			
			mr.setReserva(reserva);
			Mensagem mensagemRetornada = EnviaDados.enviarMensagem(mr);
			ManterReserva msgResponse = null;
			if(mensagemRetornada instanceof ManterReserva){
				msgResponse = (ManterReserva) mensagemRetornada;
			}
			
			if(msgResponse.getTipoManterReserva() == 11){
				JOptionPane.showMessageDialog(getCr().getTfCadastrarReserva(),"Reserva adicionado com sucesso!", "Info!",JOptionPane.INFORMATION_MESSAGE);
				getCr().getTfCadastrarReserva().dispose();
			} else if(msgResponse.getTipoManterReserva() == 12){
				JOptionPane.showMessageDialog(getCr().getTfCadastrarReserva(),"Reserva não cadastrada, verificar as datas!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			} else if(msgResponse.getTipoManterReserva() == 13){
				JOptionPane.showMessageDialog(getCr().getTfCadastrarReserva(),"Reserva não cadastrada, verificar o id do cliente!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}

		} else if("fechar".equals(event.getActionCommand())){
			getCr().getTfCadastrarReserva().dispose();
		}
	}

	public void setCr(CadastrarReserva cr) {
		this.cr = cr;
	}

	public CadastrarReserva getCr() {
		return cr;
	}

}
